package com.atguigu.guli.service.edu.service;

import com.atguigu.guli.service.base.dto.CourseDto;
import com.atguigu.guli.service.edu.entity.Course;
import com.atguigu.guli.service.edu.entity.form.CourseInfoForm;
import com.atguigu.guli.service.edu.entity.vo.*;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 课程 服务类
 * </p>
 *
 * @author Helen
 * @since 2020-04-01
 */
public interface CourseService extends IService<Course> {

    /**
     * 保存课程和课程详情信息
     * @param courseInfoForm
     * @return 新生成的课程id
     */
    String saveCourseInfo(CourseInfoForm courseInfoForm);

    /**
     * 根据课程id查询课程详细信息
     * @param id 课程id
     * @return 查询到的课程
     */
    CourseInfoForm getCourseInfoById(String id);

    /**
     * 根据课程id修改课程详细信息
     * @param courseInfoForm
     */
    void updateCourseInfoById(CourseInfoForm courseInfoForm);

    /**
     * 分页查询课程详细信息
     * @param page
     * @param limit
     * @param courseQueryVo
     * @return
     */
    IPage<CourseVo> selectPage(Long page, Long limit, CourseQueryVo courseQueryVo);

    /**
     * 根据id删除课程封面
     * @param id
     * @return
     */
    boolean removeCoverById(String id);

    /**
     * 根据课程id删除课程详细信息
     * @param id
     * @return
     */
    boolean removeCourseById(String id);

    /**
     * 根据id查询得到发布的课程对象
     * @param id
     * @return
     */
    CoursePublishVo getCoursePublishVoById(String id);

    /**
     * 根据id修改课程状态
     * @param id
     * @return
     */
    boolean publishCourseById(String id);

    /**
     * 根据客户端查询条件查询课程
     * @param webCourseQueryVo
     * @return
     */
    List<Course> webSelectList(WebCourseQueryVo webCourseQueryVo);

    /**
     * 获取课程信息并更新浏览量
     * @param id
     * @return
     */
    WebCourseVo selectWebCourseVoById(String id);

    /**
     * 查询最热门的8条记录
     * @return
     */
    List<Course> selectHotCourse();

    /**
     * 根据课程id查询课程信息
     * @param courseId
     * @return
     */
    CourseDto getCourseDtoById(String courseId);

    /**
     * 修改课程销量
     * @param id
     */
    void updateBuyCountById(String id);
}
